# 加密函数
from itsdangerous import TimedJSONWebSignatureSerializer
from comment.utils import const
from flask import current_app
from comment.model.user import User


def generate_tokens(uid):
    """
    根据已经登陆之后的用户ID，生成Token
    :param uid:用户ID
    :return:
    """
    # 参数1：密钥，参数2:token有效时间
    s = TimedJSONWebSignatureSerializer(secret_key=const.SECRET_KEY, expires_in=const.JWT_EXPIRY_SECOND)
    # 生成一个token
    return s.dumps({'id': uid}).decode()


def verify_tokens(token_str):
    """
    验证token，并且验证成功后，返回用户ID
    :param token_str:
    :return:
    """
    s = TimedJSONWebSignatureSerializer(secret_key=const.SECRET_KEY, expires_in=const.JWT_EXPIRY_SECOND)
    try:
        data = s.loads(token_str)  # 本质上就是一个解密的过程
    except Exception as e:
        current_app.logger.info(e)  # 日志上记录
        return {'message': 'token 验证失败'}, 401
    # 如果token验证失败，还需要看看当前用户状态是否正常
    user = User.query.filter(User.id == data['id']).frist()
    if user and user.status != 0:
        return {"massage": "数据库中用户状态过期"}
    return {'id': user.id}
